home *** CD-ROM | disk | FTP | other *** search
/ Linux Cubed Series 7: Sunsite / Linux Cubed Series 7 - Sunsite Vol 1.iso / system / emulator / bsvc-1.000 / bsvc-1 / bsvc-1.0.4 / src / SimHector / cpu / ALU.hxx < prev    next >
Text File  |  1995-07-26  |  2KB  |  73 lines

  1. ///////////////////////////////////////////////////////////////////////////////
  2. //
  3. // ALU.hxx - Arithmetic Logic Unit
  4. //
  5. // By: Bradford W. Mott
  6. // December 3,1993
  7. //
  8. ///////////////////////////////////////////////////////////////////////////////
  9.  
  10. #ifndef ALU_HXX
  11. #define ALU_HXX
  12.  
  13. // ALU Function codes
  14. enum ALUFunction {
  15.   ADD        = 0x00,   ADDC       = 0x01,   SUB        = 0x02,
  16.   AND        = 0x03,   SUBC       = 0x04,   OR         = 0x05,
  17.   XOR        = 0x06,   CMP        = 0x0a,   BTST       = 0x0b,
  18.   NOT_A      = 0x80,   NEG_A      = 0x81,   INC_A      = 0x82,
  19.   DEC_A      = 0x83,   SHL_A      = 0x90,   ROL_A      = 0x91,
  20.   SHR_A      = 0x92,   ROR_A      = 0x93,   PASS_A     = 0x100,
  21.   SWAP_A     = 0x101,  ADD_NCC    = 0x102,  INC_A_NCC  = 0x103,
  22.   INC_B_NCC  = 0x104,  DEC_A_NCC  = 0x105,  DEC_B_NCC  = 0x106,
  23.   A_CC       = 0x107,  CC_OUT     = 0x108,  PASS_A_NCC = 0x10a,
  24.   SUB_NCC    = 0x10b,  DO_NOTHING = 0xffff
  25. };
  26.  
  27. // ALU Condition Codes
  28. enum ALUConditionCode {
  29.   CC_VC = 0,  CC_PL = 1,  CC_GE = 2,  CC_F  = 3, CC_LE = 4,  CC_NE = 5,
  30.   CC_LS = 6,  CC_CC = 7,  CC_VS = 8,  CC_MI = 9, CC_LT = 10, CC_T  = 11,
  31.   CC_GT = 12, CC_EQ = 13, CC_HI = 14, CC_CS = 15
  32. };
  33.  
  34. // ALU Flags 
  35. const unsigned long C_FLAG=0x8000;
  36. const unsigned long V_FLAG=0x4000;
  37. const unsigned long N_FLAG=0x2000;
  38. const unsigned long Z_FLAG=0x1000;
  39. const unsigned long I_FLAG=0x0800; 
  40.  
  41. ///////////////////////////////////////////////////////////////////////////////
  42. // The Arithmetic Logic Unit
  43. ///////////////////////////////////////////////////////////////////////////////
  44. class ALU {
  45.   private:
  46.  
  47.     // ALU flags (16 bits: CVNZI-----------)
  48.     unsigned long flags;
  49.  
  50.   public:
  51.     ALU()
  52.     { flags=I_FLAG; }
  53.  
  54.     ~ALU()
  55.     {}
  56.  
  57.     // Get the ALU's flags
  58.     inline unsigned long GetFlags()
  59.     { return(flags); }
  60.  
  61.     // Set the ALU's flags 
  62.     inline void SetFlags(unsigned long value)
  63.     { flags=value & 0xf800; }
  64.  
  65.     // Compute a result with the given operation and inputs
  66.     unsigned long Compute(ALUFunction f, unsigned long a, unsigned long b);
  67.  
  68.     // Test the given Condition Code
  69.     int TestConditionCode(ALUConditionCode cc, const char* &description);
  70. };
  71. #endif
  72.  
  73.